package com.yxym.event_;

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

@SuppressWarnings({"all"})
/**
 * 演示小球通过键盘控制上下左右的移动->讲解java的时间控制
 */
public class BallMove extends JFrame {
    private MyPanel myPanel = null;

    public static void main(String[] args) {
        BallMove ballMove = new BallMove();
    }
    public BallMove(){
        myPanel = new MyPanel();

        //把面板放到窗口中
        this.add(myPanel);

        //设置窗口的大小
        this.setSize(1000,800);

        //窗口JFrame对象可以监听面板上发生的键盘事件...
        this.addKeyListener(myPanel);

        //退出程序
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        //显示窗口
        this.setVisible(true);
    }
}

//面板 ，可以画出小球
class MyPanel extends JPanel implements KeyListener  {
    //KeyListener（监听器）监听键盘事件
    //为了让小球可以移动，把他左上角的坐标(x,y)设置变量
    int x = 10;
    int y = 10;
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x,y,20,20);
    }

    //有字符输出时，该方法就会触发
    @Override
    public void keyTyped(KeyEvent e) {
    }

    //当某个键按下的时候，该方法就会触发
    @Override
    public void keyPressed(KeyEvent e) {
        //System.out.println((char)e.getKeyCode() + "输入...");
        //输入上下左右的健控制小球的移动
        if(e.getKeyCode() == KeyEvent.VK_DOWN){
            //KeyEvent.VK_DOWN就是向下的箭头对应的code（java给每个建盘上的建对应一个值）
            y++;
        }else if(e.getKeyCode() == KeyEvent.VK_U){
            y--;
        }else if(e.getKeyCode() == KeyEvent.VK_LEFT){
            x--;
        }else if (e.getKeyCode() == KeyEvent.VK_RIGHT){
            x++;
        }

        //让面板重绘制
        this.repaint();
    }

    //当某个键松开的时候，该方法就会触发
    @Override
    public void keyReleased(KeyEvent e) {
    }
}